using System;

// 定义动物基类
public abstract class Animal
{
    // 抽象方法voice()
    public abstract void Voice();
}

// 定义Cat类，继承Animal类
public class Cat : Animal
{
    // 实现voice方法
    public override void Voice()
    {
        Console.WriteLine("喵喵喵~");
    }
}

// 定义Dog类，继承Animal类
public class Dog : Animal
{
    // 实现voice方法
    public override void Voice()
    {
        Console.WriteLine("汪汪汪~");
    }
}

// 定义Pig类，继承Animal类
public class Pig : Animal
{
    // 实现voice方法
    public override void Voice()
    {
        Console.WriteLine("哼哼哼~");
    }
}

// 定义Store（宠物店）类
public class Store
{
    // getInstance方法，根据传入的参数返回对应的动物对象
    public static Animal GetInstance(string animalType)
    {
        // 根据传入的参数决定返回哪种动物对象
        switch (animalType.ToLower())
        {
            case "dog":
                return new Dog();
            case "pig":
                return new Pig();
            default:
                return new Cat();
        }
    }
}

// 主程序类
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== 宠物店演示程序 ===");
        Console.WriteLine();
        
        // 测试Store类的getInstance方法
        Animal animal1 = Store.GetInstance("dog");
        Console.WriteLine("获取了一只狗：");
        animal1.Voice();
        Console.WriteLine();
        
        Animal animal2 = Store.GetInstance("pig");
        Console.WriteLine("获取了一只猪：");
        animal2.Voice();
        Console.WriteLine();
        
        Animal animal3 = Store.GetInstance("cat");
        Console.WriteLine("获取了一只猫：");
        animal3.Voice();
        Console.WriteLine();
        
        Animal animal4 = Store.GetInstance("bird"); // 传入未定义的动物类型，应该返回Cat
        Console.WriteLine("获取了一只未知动物（应该是猫）：");
        animal4.Voice();
        
        Console.WriteLine();
        Console.WriteLine("按任意键退出...");
        Console.ReadKey();
    }
}